import { ref, Ref } from "vue";

const num = ref(10);

const num1: Ref<string> = ref("张三");

export interface Contact {
  name: string; // 姓名
  phone?: string; // 手机号
  email: string; // 邮箱
  avatar: string; // 头像
  userid: string; // id
}

/**
 * Omit
 *    作用：去除一些属性
 *    语法：
 *        type 新类型 = Omit<要基于的类型, 要去除的属性的联合>
 */
export type OmitEmailContact = Omit<Contact, "email" | "name">;

/**
 * Pick
 *    作用：与 Omit 相反，选择一些属性
 */
export type AAAAA = Pick<Contact, "email" | "name">;

/**
 * Readonly
 *    作用：将一个类型的所有属性都转换成只读属性，并返回一个新类型
 *    语法：
 *        type 新类型 = Readonly<要基于的类型>
 */
export type BBBBB = Readonly<Contact>;

/**
 * Required
 *    作用：去除可选，都变成必须属性
 */
export type CCCCC = Required<Contact>;

/**
 * Partial
 *    作用：与 Required 相反
 */
export type DDDDD = Partial<Contact>;

/**
 * typeof 关键字
 *    作用：返回数据的类型
 */

function callback(value: string): string[] {
  return ["张三", "里斯"];
}

type EEEEE = typeof callback;

/**
 * ReturnType
 *    作用：获取函数类型的返回值类型
 */
type FFFFF = ReturnType<typeof callback>;

/**
 * Array
 *    作用：声明一个xxxx类型的数组类型
 */
